//package com.fecean.aabbc.netty.client.prod5;
//
//import com.fecean.aabbc.netty.handler5.NettyNoticeChannelHandler;
//import com.fecean.aabbc.netty.handler5.NettyRequestChannelHandler;
//import com.fecean.aabbc.netty.handler5.NettyResponseChannelHandler;
//import com.fecean.aabbc.netty.message5.MessageProto;
//import io.netty.channel.ChannelInitializer;
//import io.netty.channel.socket.SocketChannel;
//import io.netty.handler.codec.protobuf.ProtobufDecoder;
//import io.netty.handler.codec.protobuf.ProtobufEncoder;
//import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
//import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;
//import io.netty.handler.timeout.IdleStateHandler;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.concurrent.TimeUnit;
//
///**
// ** Netty客户端通道初始化
// *
// * @author: chenfenghai
// * @version: 1.0
// * @date: 2020-02-24 10:13
// * @blame Team
// */
//@Component
//public class NettyClientChannelInitializer extends ChannelInitializer<SocketChannel> {
//
//    @Resource
//    NettyClientRegisterHandler nettyClientRegisterHandler;
//
//    @Resource
//    NettyClientHeartbeatHandler nettyClientHeartbeatHandler;
//
//    /**
//     ** 通知通道处理
//     */
//    @Resource
//    NettyNoticeChannelHandler nettyNoticeChannelHandler;
//
//    /**
//     ** 请求通道处理
//     */
//    @Resource
//    NettyRequestChannelHandler nettyRequestChannelHandler;
//
//    /**
//     ** 响应通道处理
//     */
//    @Resource
//    NettyResponseChannelHandler nettyResponseChannelHandler;
//
//    @Override
//    protected void initChannel(SocketChannel socketChannel) throws Exception {
//        // 客户端添加心跳处理
//        socketChannel.pipeline().addLast(new IdleStateHandler(0L, 30L, 0L, TimeUnit.SECONDS));
//        // 添加编码处理：实体类传输数据，protobuf序列化
//        socketChannel.pipeline().addLast(new ProtobufVarint32FrameDecoder());
//        socketChannel.pipeline().addLast(new ProtobufDecoder(MessageProto.Message.getDefaultInstance()));
//        socketChannel.pipeline().addLast(new ProtobufVarint32LengthFieldPrepender());
//        socketChannel.pipeline().addLast(new ProtobufEncoder());
//        // 添加注册通道处理
//        socketChannel.pipeline().addLast(nettyClientRegisterHandler);
//        // 添加心跳通道处理
//        socketChannel.pipeline().addLast(nettyClientHeartbeatHandler);
//        // 添加通知通道处理
//        socketChannel.pipeline().addLast(nettyNoticeChannelHandler);
//        // 添加请求通道处理
//        socketChannel.pipeline().addLast(nettyRequestChannelHandler);
//        // 添加响应通道处理
//        socketChannel.pipeline().addLast(nettyResponseChannelHandler);
//    }
//}
